package ve.usb.buscame;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


public class EscucharCliente extends Activity implements Runnable  {
	
	static String mensajeHilo;
	private static final int NOTIFY_ID = 1;
	TextView txt;
	String remitente;
	String mensaje;
	
	@Override 
	public void onCreate(Bundle savedInstanceState) {
	  super.onCreate(savedInstanceState);
	  setContentView(R.layout.main); 
	  LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
	  txt = new TextView(getApplicationContext());  
	  rootLayout.addView(txt);  
	  Log.d("onCreate","ENTRE EN EL ONCREATE"); 
	  Thread escuchar = new Thread(this);
	  escuchar.start();
	  return;
	}
	
	public void bienvenida(){
//		AlertDialog.Builder builder;
//		
//		Context mContext = getApplicationContext();
//		LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
//		View layout = inflater.inflate(R.layout.bienvenida,
//		                               (ViewGroup) findViewById(R.id.layout_root));
//		Dialog dialog = new Dialog(mContext);
//
//		dialog.setContentView(R.layout.bienvenida);
//		dialog.setTitle("Custom Dialog");
//		
//		TextView text = (TextView) dialog.findViewById(R.id.text);
//		text.setText("Hello, this is a custom dialog!");
//	  	ImageView image = (ImageView) dialog.findViewById(R.id.image);
//	  	image.setImageResource(R.drawable.buscame_icono);
//	  	builder = new AlertDialog.Builder(mContext);
//	  	builder.setView(layout);
//	  	AlertDialog alert = builder.create();
//	  	alert.show();
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		//builder.setMessage("Desea eliminar a ");
		builder.setPositiveButton("Bienvenido "+Login.usuario+"!", new DialogInterface.OnClickListener() {
		           public void onClick(DialogInterface dialog, int id) {
		        	// back to "Principal" activity
					Intent intent = new Intent();
		            setResult(RESULT_OK, intent);
		            finish();
		           }
		       });
		       
		AlertDialog alert = builder.create();
		alert.show();
	  }
	
	@Override
	protected void onResume() {
	// TODO Auto-generated method stub
		super.onResume();  
		bienvenida();
		//notificacion();
	}
	
	
	public void run() {
         try {
        	 Log.d("onCreate","ENTRE EN EL run");
        	 Log.d("EscucharCliente", "Inicie EscucharCliente.run()");
        	 Log.d("EscucharCliente", "socket.isClosed(): "+Cliente.socket.isClosed()); 
        	 BufferedReader in = new BufferedReader(new InputStreamReader(Cliente.socket.getInputStream()));
//        	 TODO ver como hacer para que no de error cuando me desconecte. Null pointer exception
        	 Cliente.finalizarEscucharCliente = true;
        	 while((mensajeHilo = in.readLine()) != null && Cliente.finalizarEscucharCliente){   	      		 
	         	 Log.d("EscucharCliente", "Mensaje recibido: " + mensajeHilo);
		         if (mensajeHilo.equals("AmigosOnline")){
			         String tmp =  in.readLine().replace("[", "").replace("]", "").replace("\"", "");
			         String [] amigosOnline = tmp.split(",");
			         AmigosOnline.amigosOnline = amigosOnline;
			         //aqui tenemos la lista de amigos Online
			         Conversacion.amigosBroadcast = new ArrayList<String>(Arrays.asList(amigosOnline));
			         Conversacion.amigosBroadcast.remove(0);
			         Log.d("EscucharCliente","Amigos online: " + Arrays.toString(amigosOnline)); 
		         }else if (mensajeHilo.trim().equals("AmigosOffline")){
		        	 // mensaje AmigosOffline
			         String tmp =  in.readLine().replace("[", "").replace("]", "").replace("\"", "");
			         String [] amigosOffline = tmp.split(",");
			         AmigosOffline.amigosOffline = amigosOffline;
			         Log.d("EscucharCliente","Amigos offline: " + Arrays.toString(amigosOffline));
		         }else if (mensajeHilo.trim().equals("AmigosGPS")){
			         String tmp =  in.readLine().replace("[", "").replace("]", "").replace("\"", "");
			         String [] amigosGPS = tmp.split(",");
			         AmigosGPS.amigosGPS = amigosGPS;
			         Log.d("EscucharCliente","Amigos offline: " + Arrays.toString(amigosGPS));
		         }else{
		        	 Log.d("EscucharCliente","Entre");
		        	 //Llego un mensaje normal. Cada mensaje es de la forma [remitente|mensaje]
		        	 String [] mensajeRemitenteMensaje = mensajeHilo.split("[|]");
		        	 for(int i = 1; i < mensajeRemitenteMensaje.length; i++){
		        		 String [] parseMensaje = mensajeRemitenteMensaje[i].trim().split("[$]");
		        		 Log.d("EscucharCliente", "parseMensaje: " + Arrays.toString(parseMensaje));
		        		 remitente = parseMensaje[0];
		        		 mensaje = parseMensaje[1];
		        		 insertarEnTabla(remitente);
		        		 Principal.conv.get(remitente).add(mensaje);
		        		 Log.d("EscucharCliente", "Tabla conv: " + Principal.conv.toString());
		        	 }
		        	 //llamar al metodo notificaciones
		        	 notificacion(remitente,mensaje);
		         }
        	 }
        }catch(Exception e){
        	Log.e("EscucharCliente", "Error", e);
        }finally{
        	Log.w("EscucharCliente", "Finalizo EscucharCliente.");
        }
        return;
	 } //fin del run()
	 
	void insertarEnTabla(String id){
	   	//Si el cliente actual no esta en la tabla se agrega con una cola vacia
		if (!Principal.conv.containsKey(id)){
 	 		Queue <String> colaInicial = new LinkedList<String>();
 	 		Principal.conv.put(id, colaInicial);
  		};
	 }
	
	int count = 0;
	void notificacion(String remitente,String mensaje){
		String ns = Context.NOTIFICATION_SERVICE;
		NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
		int icon = R.drawable.buscame_icono;
		CharSequence tickerText = "Nuevo Mensaje de "+remitente+"!";
		long when = System.currentTimeMillis();

		Notification notification = new Notification(icon, tickerText, when);
		notification.flags = Notification.DEFAULT_SOUND | 
							 Notification.DEFAULT_VIBRATE |
							 Notification.DEFAULT_LIGHTS | 
							 Notification.FLAG_AUTO_CANCEL;
		Context context = getApplicationContext();
		CharSequence contentTitle = "Buscame";
		CharSequence contentText = remitente+": "+mensaje;
		Cliente.userConv = remitente;
		
		Intent notificationIntent = new Intent(this, MisGrupos.class);
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
		
		count = count+1;
		mNotificationManager.notify(count, notification);
		}
}